package com.bestcem.xm.user.service;

import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.user.service.dto.PageRequestDTO;
import com.bestcem.xm.user.service.dto.PageResponseDTO;
import com.bestcem.xm.user.service.dto.user.UserSmtpDTO;

import java.util.List;

/**
 * 邮箱配置服务
 *
 * @author qiongyu.cui <qiongyu.cui@idiaoyan.com>
 * @version v1.0
 * @date 2022/3/16 11:30
 */
public interface UserSmtpService {

    /**
     * 分页查询指定验证状态的邮箱列表
     *
     * @param page           分页信息
     * @param orgId          公司id
     * @param validateStatus 验证状态列表
     * @return com.bestcem.xm.util.ServiceResult<com.bestcem.xm.user.service.dto.PageResponseDTO < com.bestcem.xm.user.service.dto.user.UserSmtpDTO>>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/18 14:39
     */
    ServiceResult<PageResponseDTO<UserSmtpDTO>> listByPage(PageRequestDTO page, String orgId, List<Integer> validateStatus);

    /**
     * 查询指定验证状态的邮箱列表
     *
     * @param orgId          公司id
     * @param descending     是否是降序，默认升序
     * @param sortBy         排序字段
     * @param validateStatus 验证状态列表
     * @return com.bestcem.xm.util.ServiceResult<java.util.List < com.bestcem.xm.user.service.dto.user.UserSmtpDTO>>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/05/29 14:00
     */
    ServiceResult<List<UserSmtpDTO>> listSmtp(String orgId, Boolean descending, String sortBy, List<Integer> validateStatus);

    /**
     * 根据邮箱配置id查询邮箱配置信息
     *
     * @param smtpId 邮箱配置id
     * @return com.bestcem.xm.util.ServiceResult<com.bestcem.xm.user.service.dto.user.UserSmtpDTO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/17 11:33
     */
    ServiceResult<UserSmtpDTO> selectById(String smtpId);

    /**
     * 根据相关查询条件查询邮箱配置信息列表
     *
     * @param userSmtpDTO 邮箱配置信息
     * @return com.bestcem.xm.util.ServiceResult<List < UserSmtpDTO>>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/17 15:16
     */
    ServiceResult<List<UserSmtpDTO>> selectBySelective(UserSmtpDTO userSmtpDTO);

    /**
     * 根据邮箱配置id和公司id查询邮箱配置信息
     *
     * @param smtpId 邮箱配置id
     * @param orgId  公司id
     * @return com.bestcem.xm.util.ServiceResult<com.bestcem.xm.user.service.dto.user.UserSmtpDTO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/17 11:38
     */
    ServiceResult<UserSmtpDTO> selectByIdAndOrgId(String smtpId, String orgId);

    /**
     * 根据公司id和邮箱配置id更新邮箱配置相关信息
     *
     * @param smtpId      邮箱配置id
     * @param orgId       公司id
     * @param userSmtpDto 邮箱配置相关信息
     * @return com.bestcem.xm.util.ServiceResult<java.lang.Boolean>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/17 11:53
     */
    ServiceResult<Boolean> updateByIdAndOrgId(String smtpId, String orgId, UserSmtpDTO userSmtpDto);

    /**
     * 添加邮箱设置
     *
     * @param orgId 公司id
     * @param dto   可选参数对象
     * @return com.bestcem.xm.util.ServiceResult<java.lang.Boolean>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/17 16:40
     */
    ServiceResult<String> createSmtp(String orgId, UserSmtpDTO dto);

    /**
     * 可选参数新增
     *
     * @param dto 可选参数
     * @return com.bestcem.xm.util.ServiceResult<java.lang.Void>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/21 21:28
     */
    ServiceResult<String> insertSelective(UserSmtpDTO dto);

    /**
     * 更新邮箱设置
     *
     * @param orgId 租户id
     * @param dto   邮箱信息
     * @return com.bestcem.xm.util.ServiceResult<java.lang.String>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/17 18:31
     */
    ServiceResult<String> updateSmtp(String orgId, UserSmtpDTO dto);

    /**
     * 根据id列表批量删除
     *
     * @param orgId 公司id
     * @param ids   id列表
     * @return com.bestcem.xm.util.ServiceResult<java.lang.Integer>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/17 18:32
     */
    ServiceResult<Integer> deleteSmtpByIds(String orgId, List<String> ids);

    /**
     * 可选条件删除
     *
     * @param userSmtpDTO
     * @return com.bestcem.xm.util.ServiceResult<java.lang.Integer>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/21 20:08
     */
    ServiceResult<Integer> deleteBySelective(UserSmtpDTO userSmtpDTO);

    /**
     * 创建公司系统邮箱
     *
     * @param orgId  公司id
     * @param smtpId
     * @return ServiceResult<String>
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/4/29 08:51
     */
    ServiceResult<String> createSystemSmtp(String orgId, String smtpId);

}
